/**
 * 
 */
package ar.utn.frgp.banco.entity;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import ar.utn.frgp.banco.entity.enums.EstadoCuenta;
import ar.utn.frgp.banco.entity.enums.TipoCuenta;

/**
 * @author gvolpe
 * @since 18/04/2012 14:55:55
 */
@Entity
@Table(name="CUENTAS")
@SequenceGenerator(name="sec_cuentas",sequenceName="S_CUENTAS")
public class Cuenta {

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sec_cuentas")
	@Column(name="NRO_CUENTA",nullable=false,columnDefinition="number")
	private Long numero;
	
	@Enumerated(EnumType.ORDINAL)
	@Column(name="ESTADO",nullable=false,columnDefinition="number")
	private EstadoCuenta estadoCuenta;
	
	@Column(name="SALDO",nullable=false,columnDefinition="number")
	private BigDecimal saldo;
	
	@Column(name="DESCUBIERTO",nullable=false,columnDefinition="number")
	private BigDecimal descubierto;
	
	@OneToMany(mappedBy="cuentaOrigen")
	private List<Transferencias> transferencias;
	
	@Enumerated(EnumType.STRING)
	@Column(name="TIPO_CTA")
	private TipoCuenta tipoCuenta;
	
	@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinColumn(name="NRO_CUENTA")
	@OrderColumn(name="ORDEN")
	private List<Movimientos> movimientos;
	
	@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinColumn(name="NRO_CTA_ORIGEN")
	private List<PlazoFijo> plazosFijo;
	
	public List<PlazoFijo> getPlazosFijo() {
		return plazosFijo;
	}

	public void setPlazosFijo(List<PlazoFijo> plazosFijo) {
		this.plazosFijo = plazosFijo;
	}

	public Cuenta() {
		
	}

	public Long getNumero() {
		return numero;
	}

	public void setNumero(Long numero) {
		this.numero = numero;
	}
	
	public BigDecimal getSaldo() {
		return saldo;
	}

	public void setSaldo(BigDecimal saldo) {
		this.saldo = saldo;
	}

	public BigDecimal getDescubierto() {
		return descubierto;
	}

	public void setDescubierto(BigDecimal descubierto) {
		this.descubierto = descubierto;
	}
	
	public void setDescubierto(double descubierto) {
		this.descubierto = BigDecimal.valueOf(descubierto);
	}

	public void setEstadoCuenta(String estadoCuenta) {
		this.estadoCuenta = EstadoCuenta.getEstadoCuenta(estadoCuenta);
	}
	
	public void setEstadoCuenta(EstadoCuenta estadoCuenta) {
		this.estadoCuenta = estadoCuenta;
	}

	public EstadoCuenta getEstadoCuenta() {
		return estadoCuenta;
	}

	/**
	 * @return the transferencias
	 */
	public List<Transferencias> getTransferencias() {
		return transferencias;
	}

	/**
	 * @param transferencias the transferencias to set
	 */
	public void setTransferencias(List<Transferencias> transferencias) {
		this.transferencias = transferencias;
	}

	/**
	 * @return the tipoCuenta
	 */
	public TipoCuenta getTipoCuenta() {
		return tipoCuenta;
	}

	/**
	 * @param tipoCuenta the tipoCuenta to set
	 */
	public void setTipoCuenta(TipoCuenta tipoCuenta) {
		this.tipoCuenta = tipoCuenta;
	}

	public List<Movimientos> getMovimientos() {
		return movimientos;
	}

	public void setMovimientos(List<Movimientos> movimientos) {
		this.movimientos = movimientos;
	}

}
